package cn.cdutetc.library.service;

import cn.cdutetc.library.entity.dto.SystemParamConfigDTO;
import cn.cdutetc.library.entity.pojo.SystemConfig;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * 系统配置服务接口
 */
public interface SystemConfigService extends IService<SystemConfig> {

    /**
     * 获取配置值
     * @param configKey 配置键
     * @return 配置值
     */
    String getConfigValue(String configKey);

    /**
     * 获取配置值，如果不存在则返回默认值
     * @param configKey 配置键
     * @param defaultValue 默认值
     * @return 配置值
     */
    String getConfigValue(String configKey, String defaultValue);

    /**
     * 设置配置值
     * @param configKey 配置键
     * @param configValue 配置值
     * @param description 配置描述
     * @return 是否成功
     */
    boolean setConfigValue(String configKey, String configValue, String description);

    /**
     * 批量设置配置值
     * @param configMap 配置映射
     * @return 是否成功
     */
    boolean batchSetConfig(Map<String, String> configMap);

    /**
     * 删除配置
     * @param configKey 配置键
     * @return 是否成功
     */
    boolean deleteConfig(String configKey);

    /**
     * 获取所有配置
     * @return 配置列表
     */
    List<SystemConfig> getAllConfigs();

    /**
     * 获取系统配置
     * @return 系统配置DTO
     */
    SystemParamConfigDTO getSystemConfig();

    /**
     * 保存系统配置
     * @param config 系统配置DTO
     * @return 是否成功
     */
    boolean saveSystemConfig(SystemParamConfigDTO config);

    /**
     * 恢复默认配置
     * @return 是否成功
     */
    boolean resetSystemConfig();

    /**
     * 检查维护模式
     * @return 是否处于维护模式
     */
    boolean isMaintenanceMode();

    /**
     * 验证维护密码
     * @param password 维护密码
     * @return 是否验证成功
     */
    boolean verifyMaintenancePassword(String password);
}